package com.example.eventbus
/**
 *
 * 通过这两个字段我们就可以确定一个唯一的key，准确的找到所对应的事件执行方法。
eventClass: Class<IEvent> 是我们通过 EventBus 发出的事件类

tag: String 是我们发出事件类时所指定的 tag

 * */
class EventType(private var eventClass: Class<IEvent>, private var tag:String) {
    override fun equals(other: Any?): Boolean {
        // 比较内存引用地址，相同则返回 true
        if (this === other) {
            return true
        }
        // 判断是否为空，是否属于同一中类型
        if (other == null || (other.javaClass.name !== this.javaClass.name)) {
            return false
        }
        // 能执行到这里，说明 obj 和 this 同类且非 nullv

        val eventType = other as EventType
        val tagJudge =  tag == eventType.tag
        val eventJudge = eventClass.name  == eventType.eventClass.name


        return tagJudge && eventJudge;
    }


    override fun hashCode(): Int {
        var hash = 7
        hash = hash * 31 + eventClass.hashCode()
        hash = hash * 31 + tag.hashCode()
        return  hash

    }
}